ponerle los piquetes al UI de Qt
- iconos en los window corners
- find icon en el search window
- in search window, save columns width and search parameters to configuration (def reject(self))
- mroe than one file selectable and draganddroppable (not hard to do, change selectio property type and change method of generating dragobject)

make logo

dynamic playlist handling:
- en este momento, si la configuracion cambia, por X, Y o Z motivo, el config dialog no esta reflejando ese hecho.  Esto significa que si se agrega borra o renombra un dynamic playlist, no se modifica el combobox del dialog box... Por si acaso, en _the_real_run se esta haciendo el chequeo de si existe o no exist eel subquery, y si se esta moviendo en la configuracion para que sea None.
- interfaz de usuario deberia actualizarse cuando se crean / borran dynamic playlists. pero el problema es que amarok no guarda el archivo del dynamic playlists cuando se los modifica.

- reenable pydcop or find the right pykde and retry again the unicode problem and the pyqt problem.  the unicode problem was that before passing arguments to dcop_call they needed to be turned into iso-8859-1, which caused problems with files with filenames encoded in iso-8859-1.  and the pyqt problem is the double qapplication (one gui, one no gui) problem..  Creo que tengo la solucion.  Todos los argumentos que sean string deben pasarse primero por una funcion que los convierta a unicode usando el getfilesystemencoding o algo asi.

- wherever a config value is touched/written/changed, we need to raise my custom homegrown config_changed signal. peinar las sources a ver si este es el caso.

- investigate cual es la influencia del factor volume_diff en el codigo fuente de GJay, y mirar como incorporarlo a mi hua.

Falta robustez para manejar los symlinks (cuando se indexean (recordemos que amarok puede tener una cancion y un simlink a esa misma cancion en la coleccion), cuando se hace el super dj loop tambien).

falta una funcion y un llamado a esa funcion que purge los archivos que ya no existen en el disco... o en la coleccion?  no se aun como sera esa hua.

DEbe ser posible que, cuando una cancion no pudo descodificarse (por ejemplo tenemos una version vieja de soganalysis que no decodifica FLACs), se la marque, cosa que cuando tengamos una version nueva (detectemos un cambio en la version de esa nota) podamos reintentar rescanear SOLO ESAS CANCIONES. Osea un flag "could not be scanned".  Al iniciar sacariamos la "version" actual de songanalysis (una especie de version string "1.2.1+mp3+flac+ogg"), la comparariamos con la version de la ultima ejecucion, y si son diferentes, buscariamos las que no pudieron escanearse, y las eliminariamos de la tabla analysis para que sean reescaneadas en el proceso subsiguiente.

BTW, el chequeo de interface es ortogonal, por supuesto, y debe permanecer, cosa que cuando cambie la interfaz, se reescanee todo.  Probablemente amarok-songanalysis deba exigir determinada interfaz X.  O tal vez podemos solucionar ese problema haciendo comandos paralelos.  Songanalysis2, songanalysis3... who knows.  that's kind of far away for now.

En el search box, poner botones "Insert after current song" y "Append to playlist".

y tenemos que añadir a la configuracion y al search algo para que haya tempo drift, cosa que el playlist se vaya haciendo mas rapido o mas lento cada vez

el algoritmo del tempo esta MAL.  segun yo el algoritmo correcto es hacer que la cancion pase por un bandpass filter < 200hz, y "reproducirla" detectando beats, haciendo una lista de los tiempos entre beats (probablemente estoy se pueda programar en mmpython), y sacando la moda de esa lista, ese debe ser el tempo.  buscar info sobre raytracing beat detection.
algoritmo tempo sugerido x mi:
dado un bufer, recorrer el bufer y buscar beats.  para cada beat encontrado, almacenar la diferencia de intensidad y la posicion absoluta (tiempo).  cuando esto se haya concluido, coger la lista de tiempos y hacer una lista de (TsubN - TsubN-1).  Obtener la moda de esta lista.   Yata.

revisar el algoritmo de spectrum similarity.  pvh puede ayudar.

The following is obsolete:
- detect modified files, so i can re-analyze them.  there is no way to do this even with a database schema change because if a file got changed (e.g. replaced by another file), the database has no info on that.  this may actually require the construction of the uniq ID tracker code branch patch.
   if modified_date > scan_date:
       rescan (whatever that implies - regenerating the extattrs or rereading them)
because:
amarok saves the last modified date in the database.  We can use that to determine whether a file has been modified, and rescan it (basically removing it from the statistics table, and letting the loop scan it when it's due).  If it has the extattrs, we can collect them (this means that the file's contents did not change).